package stack;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @author dx
 * @version 1.0
 * @date 2022/3/27 15:07
 * @description:  用两个队列实现一个后入先出(LIFO)的栈，并支持普通栈的全部四种操作(push、top、pop、empty)
 * 实现MyStack类：
 * void push(int x)    将元素x压入栈顶
 * int pop()    移除并返回栈顶元素
 * int top()    返回栈顶元素
 * boolean empty()  如果栈是空的，返回true，否则返回false
 */
public class Que_to_Stack {

    Queue<Integer> q1 = null;
    Queue<Integer> q2 = null;

    public Que_to_Stack(){
        q1 = new LinkedList<Integer>();   //用q1模拟存储栈元素
        q2 = new LinkedList<Integer>();   //让q2始终是保证是空的，用来push新元素，然后去poll q1队列插入到新元素的后面

    }

    public void push(int x){
        q2.offer(x);
        while(!q1.isEmpty()){    //清空q1 待q2交换
            q2.offer(q1.poll());
        }
        Queue<Integer> temp = q1;
        q1 = q2;
        q2 = temp;
    }
    public int pop(){
        return q1.poll();   //poll从队列中获取第一个元素并删除
    }

    public int top(){
        return q1.peek();
    }
    public boolean empty(){
        return q1.isEmpty();
    }
}
